package de.wittekind.bundesjugendspiele.server.rmiTools.impl;

import java.io.IOException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

import de.wittekind.bundesjugendspiele.server.impl.SQLLoader;
import de.wittekind.bundesjugendspiele.server.impl.SQLRiegenLoader;
import de.wittekind.bundesjugendspiele.server.impl.rmi.RMILoader;
import de.wittekind.bundesjugendspiele.server.impl.rmi.RMIRiegenLoader;
import de.wittekind.bundesjugendspiele.server.interfaces.Loader;
import de.wittekind.bundesjugendspiele.server.interfaces.RiegenLoader;
import de.wittekind.bundesjugendspiele.server.rpcTools.RPCHelper;

public class BasicRMIHelper implements RPCHelper {
	private int port;
	private String host;
	private String name;

	public BasicRMIHelper(String host, String name, int port) {
		this.port = port;
		this.name = name;
		this.port = port;
	}

	public void exportRiegenLoader(RiegenLoader loader) throws RemoteException {
		LocateRegistry.createRegistry(port);
		UnicastRemoteObject.unexportObject(loader, true);
		RiegenLoader stub = (RiegenLoader) UnicastRemoteObject.exportObject(
				loader, port);
		Registry registry = LocateRegistry.getRegistry(host, port);
		registry.rebind(name, stub);
	}

	public void exportNewRiegenLoader() throws RemoteException, IOException {
		exportRiegenLoader(new RMIRiegenLoader(new SQLRiegenLoader()));
	}

	@Override
	public void exportLoader(Loader loader) throws RemoteException {
		LocateRegistry.createRegistry(port);
		UnicastRemoteObject.unexportObject(loader, true);
		Loader stub = (Loader) UnicastRemoteObject.exportObject(loader, port);
		Registry registry = LocateRegistry.getRegistry(host, port);
		registry.rebind(name, stub);

	}

	@Override
	public void exportNewLoader() throws IOException {
		exportLoader(new RMILoader(new SQLLoader()));

	}

}